#include <bits/stdc++.h>

using namespace std;

// dfs
// vector<string> path;
// int result = INT_MAX;

// void dfs(string current_str, string end_str, vector<string> &graph, vector<bool> &visited)
// {
//     if (current_str == end_str)
//     {
//         result = min(result, (int)path.size());
//         return;
//     }
//     for (int i = 0; i < (int)graph.size(); i++)
//     {
//         if (visited[i] == true)
//         {
//             continue;
//         }
//         int different_count = 0;
//         for (int j = 0; j < (int)end_str.size(); j++)
//         {
//             if (current_str[j] != graph[i][j])
//             {
//                 different_count++;
//             }
//         }
//         if (different_count == 1)
//         {
//             visited[i] = true;
//             path.push_back(graph[i]);
//             dfs(graph[i], end_str, graph, visited);
//             path.pop_back();
//             visited[i] = false;
//         }
//     }
// }

// int main()
// {
//     int n;
//     cin >> n;
//     string begin_str, end_str;
//     cin >> begin_str >> end_str;
//     vector<string> graph(n+1);
//     for (int i = 0; i < n; i++)
//     {
//         cin >> graph[i];
//     }
//     graph[n]=end_str;
//     vector<bool> visited(n, false);
//     dfs(begin_str, end_str, graph, visited);
//     if (result == INT_MAX)
//     {
//         cout << 0 << endl;
//     }
//     else
//     {
//         cout << result + 1 << endl;
//     }
//     return 0;
// }

// bfs
int main()
{
    int n;
    cin >> n;
    string begin_str, end_str;
    cin >> begin_str >> end_str;
    unordered_set<string> set;
    for (int i = 0; i < n; i++)
    {
        string str;
        cin >> str;
        set.insert(str);
    }
    queue<string> que;
    que.push(begin_str);
    unordered_map<string, int> map;
    map.insert(pair<string, int>(begin_str, 1));
    while (!que.empty())
    {
        string str = que.front();
        que.pop();
        int path = map[str];
        for (int i = 0; i < (int)str.size(); i++)
        {
            string new_str = str;
            for (int j = 0; j < 26; j++)
            {
                new_str[i] = j + 'a';
                if (new_str == end_str)
                {
                    cout << path + 1 << endl;
                    return 0;
                }
                if (set.find(new_str) != set.end() && map.find(new_str) == map.end())
                {
                    que.push(new_str);
                    map.insert(pair<string, int>(new_str, path + 1));
                }
            }
        }
    }
    cout << 0 << endl;
    return 0;
}